class Watcher {
    constructor(vm, key, cb) {
        // 记录vue实例
        this.vm = vm;
        // 记录需要观察的属性的key值
        this.key = key;
        // 记录当key值对应的属性变化时，执行的回调
        this.cb = cb;
        // 记录旧值,获取值得时候会触发每个属性的get方法, 我们需要把这个观察者记录在dep的subs中
        Dep.target = this;
        this.oldValue = this.vm[key];
        Dep.target = null;
    }

    update() {
        const newValue = this.vm[this.key];
        if (newValue === this.oldValue) return;
        this.cb(newValue);
    }
}